home *** CD-ROM | disk | FTP | other *** search
- /*
- * Bitte vom Cli starten.
- */
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <libraries/dos.h>
- #include <stdio.h>
- #include <fcntl.h>
-
- FILE *DateiOut=NULL;
- FILE *DateiIn=NULL;
-
- char EingabeDatei[80];
- char AusgabeDatei[80];
-
- /*
- * Struktur für den IFF-Header
- */
- struct FTXT {
- char Form[4];
- long Size;
- char ID[4];
- };
-
- struct FTXT ftxt;
-
- /*
- * Struktur für den CHRS-Chunk
- */
- struct CHRS {
- char ID[4];
- long size;
- };
-
- struct CHRS chrs;
-
- /*
- * Schreibt eine Textzeile in die Datei
- */
- BOOL WriteMyText(char *string) {
- long writesize,length=strlen(string);
-
- strcpy(chrs.ID,"CHRS");
- chrs.size=length;
-
- writesize=fwrite((char *)&chrs,1,sizeof(struct CHRS),DateiOut);
- if( writesize == sizeof(struct CHRS) ) {
- writesize=fwrite(&string[0],1,length,DateiOut);
- if( writesize == length ) {
- if( length/2*2 != length ) {
- /*
- * Ungerade Anzahl Zeichen, also ein
- * PAD-Byte einfügen
- */
- writesize=fwrite(&string[0],1,1,DateiOut);
- if( writesize==1 )
- return TRUE;
- else {
- printf("Der Text konnte nicht geschrieben werden\n");
- return FALSE;
- }
- } else return TRUE;
- } else {
- printf("Der Text konnte nicht geschrieben werden\n");
- return FALSE;
- }
- } else {
- printf("Der Text konnte nicht geschrieben werden\n");
- return FALSE;
- }
- }
-
- /*
- * Erzeugt den Dateikopf. Diese Prozedur wird zweimal
- * aufgerufen. Einmal zu Beginn, ein zweitesmal am Schluß,
- * um die Dateigreöße einzutragen.
- */
- BOOL WriteFTXTHeader() {
- long writesize;
-
- /*
- * An den Dateianfang
- */
- fseek(DateiOut,0,0);
-
- strcpy(ftxt.Form,"FORM");
- strcpy(ftxt.ID,"FTXT");
- writesize=fwrite((char *)&ftxt,1,sizeof(struct FTXT),DateiOut);
- if( writesize == sizeof(struct FTXT) )
- return TRUE;
- else {
- printf("Der Header konnte nicht geschrieben werden\n");
- return FALSE;
- }
- }
-
- /*
- * Öffnet die Eingabedatei
- */
- FILE *MyOpenToRead(char *datei) {
- FILE *new=fopen(datei,"rb");
-
- if( new==NULL )
- printf("Die Datei %s konnte nicht geöffnet werden\n",datei);
-
- return new;
- }
-
- /*
- * Erzeugt die neue Datei
- */
- FILE *MyOpenToWrite(char *datei) {
- FILE *new=fopen(datei,"wb");
-
- if( new==NULL )
- printf("Die Datei %s konnte nicht erstellt werden\n",datei);
-
- return new;
- }
-
- char Eingabebuffer[256];
-
- /*
- * Hier wird die ASCII-Datei Zeile für Zeile gelesen
- * und in ein FTXT-Format konvertiert
- */
- BOOL GenerateFTXT() {
- char *string;
-
- while( 1 ) {
- string=fgets(&Eingabebuffer[0],256,DateiIn);
- if( string!=NULL ) {
- if( WriteMyText(&Eingabebuffer[0]) == FALSE )
- return FALSE;
- } else return TRUE;
- }
- }
-
- /*
- * Bitte vom CLI/Shell starten
- */
- main(long argc, char **argv) {
- long size;
-
- if( argc ) {
- printf("Name der den Text beinhalteten Datei?\n");
- gets(EingabeDatei);
- DateiIn=MyOpenToRead(EingabeDatei);
- if( DateiIn ) {
- printf("Name der zu erstellenden FTXT-Textdatei?\n");
- gets(AusgabeDatei);
- DateiOut=MyOpenToWrite(AusgabeDatei);
- if( DateiOut ) {
-
- /*
- * Den IFF-Header schreiben
- */
- if( WriteFTXTHeader() ) {
- if( GenerateFTXT() ) {
- /*
- * Größe der Datei ermitteln
- */
- size=ftell(DateiOut);
-
- /*
- * Eintragen der Größe in den Header abzüglich
- * den ersten 8 Byte
- */
- ftxt.Size=size-8;
-
- (void) WriteFTXTHeader();
- }
- }
-
- fclose( DateiOut );
- }
- fclose( DateiIn );
- }
- }
- }
-
-